package ebj.common.jackson;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

import com.google.common.collect.Lists;

public class JacksonDemo {
	public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
		User user = new User();
		user.setAge(17);
		user.setBirth(new Date());
		user.setEmail("6688@163.com");
//		user.setName("Wendy");
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		/** 
         * ObjectMapper是JSON操作的核心，Jackson的所有JSON操作都是在ObjectMapper中实现。 
         * ObjectMapper有多个JSON序列化的方法，可以把JSON字符串保存File、OutputStream等不同的介质中。 
         * writeValue(File arg0, Object arg1)把arg1转成json序列，并保存到arg0文件中。 
         * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列，并保存到arg0输出流中。 
         * writeValueAsBytes(Object arg0)把arg0转成json序列，并把结果输出成字节数组。 
         * writeValueAsString(Object arg0)把arg0转成json序列，并把结果输出成字符串。 
         */  
		ObjectMapper objectMapper = new ObjectMapper();
//		objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
		objectMapper.setDateFormat(dateFormat);
		String json = objectMapper.writeValueAsString(user);
		System.out.println(json);
		
		List<User> users = Lists.newArrayList();
		users.add(user);
		String jsonList = objectMapper.writeValueAsString(users);
		System.out.println(jsonList);
		
		
		String jsonObj = "{\"name\":\"Wendy\",\"age\":17,\"birth\":\"2016-02-24 14:38:21\",\"email\":\"6688@163.com\"}";
		User user2 = objectMapper.readValue(jsonObj, User.class);
		System.out.println(user2.getName());
		
	}
}
